package com.sfchen.cloud.utils;

import com.fasterxml.jackson.core.type.TypeReference;
import com.sfchen.cloud.config.ObjectMapperConfig;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class JsonData<T> {

  /**
   * 状态码 0 表示成功，1表示处理中，-1表示失败
   */

  private Integer code;
  /**
   * 数据
   */

  private T data;
  /**
   * 描述
   */

  private String msg;

  /**
   * 成功，传入数据
   */
  public static <T> JsonData<T> buildSuccess() {
	return new JsonData<>(0, null, null);
  }

  /**
   * Rpc 获取数据
   */
  public T getData(TypeReference<T> typeReference) {
	return ObjectMapperConfig.getObjectMapperByDefault().convertValue(this.data, typeReference);
  }

  /**
   * 成功，传入数据
   */
  public static <T> JsonData<T> buildSuccess(T data) {
	return new JsonData<>(0, data, null);
  }

  /**
   * 失败，传入描述信息
   */
  public static <T> JsonData<T> buildError(String msg) {
	return new JsonData<>(-1, null, msg);
  }

  /**
   * 自定义状态码和错误信息
   */
  public static <T> JsonData<T> buildCodeAndMsg(int code, String msg) {
	return new JsonData<>(code, null, msg);
  }


}